{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "虽然 Python 没有专门的栈类型，但可以使用 `list` 或 `deque` 来模拟栈。`append` 相当于压栈，`pop` 相当于出栈。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用 list 作为栈\n",
    "s = []\n",
    "\n",
    "# 压栈\n",
    "s.append(10)\n",
    "s.append(20)\n",
    "s.append(30)\n",
    "\n",
    "# 是否为空，输出：False\n",
    "print(len(s) == 0)\n",
    "\n",
    "# 大小，输出：3\n",
    "print(len(s))\n",
    "\n",
    "# 栈顶元素，输出：30\n",
    "print(s[-1])\n",
    "\n",
    "# 出栈\n",
    "s.pop()\n",
    "\n",
    "# 新的栈顶元素，输出：20\n",
    "print(s[-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实际上没有必要自己做一个Stack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Stack:\n",
    "    def __init__(self):\n",
    "        self.items = []\n",
    "\n",
    "    def push(self, item):\n",
    "        self.items.append(item)\n",
    "\n",
    "    def pop(self):\n",
    "        if not self.is_empty():\n",
    "            return self.items.pop()\n",
    "\n",
    "    def peek(self):\n",
    "        if not self.is_empty():\n",
    "            return self.items[-1]\n",
    "\n",
    "    def is_empty(self):\n",
    "        return len(self.items) == 0\n",
    "\n",
    "    def size(self):\n",
    "        return len(self.items)"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
